#ifndef __INCLL
	#define __INCLL
	#pragma once
	#include "ll.c"
#endif
typedef struct Behavior QBehavior;
typedef struct State QState;
typedef struct Class QClass;
typedef struct AModifier AccessModifier;

struct AModifier{
		char  name [10];
		int line;
};

struct Behavior{
		AccessModifier access_modifier;
        QClass * qclass;
		char * name;
		//remove the next line if there'll be no connection between a state and a behavior
		char * code;
		int code_length;
};

struct State{
		AccessModifier access_modifier;
		LinkedList * qbehaviors;
		QClass * qclass;
        char * name;
		char * code;
		int code_length;
};

struct Class{
		AccessModifier access_modifier;
		LinkedList * qstates;
		LinkedList * qbehaviors;
        char * name;
		char * code;
		int code_length;
};
char * toUpperCase(char * string);
QClass * InitializeQClass();
QBehavior * InitializeQBehavior();
QState * InitializeQState();
QBehavior * getQBehavior (char * qbehavior_name, QClass *qc);
char * createStates(LinkedList *qclasses, FILE * output);
void createBehaviors(LinkedList *qclasses, FILE * output);
void createClasses(LinkedList *qclasses, FILE * output);
void createStateCollapse(LinkedList *qclasses, char * var, char * state);
QClass * getQClass (LinkedList * qclasses, char * qclass_name);
QState * getQState (LinkedList * qclasses, char * qstate_name);
QBehavior * getQBehavior2 (LinkedList * qclasses, char * qbehavior_name);
int soma(int a, int b);

